package fr.afcepf.atod.projet.tests;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import fr.afcepf.atod.projet.entities.Cour;
import fr.afcepf.atod.projet.entities.Cursus;
import fr.afcepf.atod.projet.entities.Personne;
import fr.afcepf.atod.projet.services.interfaces.IServiceCours;
import fr.afcepf.atod.projet.services.interfaces.IServicePersonne;

import junit.framework.TestCase;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/springConfig.xml"})
public class TestServicePersonne extends TestCase {
	
	@Autowired
	private IServicePersonne servicePersonne;
	
	@Autowired
	private IServiceCours serviceCours;
	
	@Test
	public void testCreationPersonne(){
		Personne p = new Personne();
		p.setNom("FIERS");
		p.setPrenom("Alex");
		p.setLogin("aaa");
		p.setPassword("aaa");
		TestCase.assertTrue(servicePersonne.ajouterPersonne(p));
	}
	
	@Test
	public void testConnection(){
		Personne p = servicePersonne.connection("aaa", "aaa");
		TestCase.assertNotNull(p);
		
		Personne p1 = servicePersonne.connection("b", "oo");
		TestCase.assertNull(p1);
		
		Personne p2 = servicePersonne.connection("", "");
		TestCase.assertNull(p2);
	}
	
	@Test
	public void testUpdatePersonne(){
		Personne p = new Personne();
		p.setNom("FIERS");
		p.setPrenom("Alex");
		Personne p2 = servicePersonne.rechercherPersonnes(p).get(0);
		
		p2.setNom("FOUFOU");
		
		servicePersonne.editerPersonne(p2);
		
		Personne p3 = servicePersonne.rechercherPersonnes(p2).get(0);
		
		TestCase.assertNotNull(p3);
		TestCase.assertTrue(p3.getNom().equals("FOUFOU"));
		
	}
	
	@Test
	public void testRemovePersonne(){
		Personne p = new Personne();
		p.setNom("FOUFOU");
		p.setPrenom("Alex");
		List<Personne> listePersonne = servicePersonne.rechercherPersonnes(p);
		TestCase.assertTrue(listePersonne.size() >0);
		
		if(listePersonne.size() >0)
		{
			servicePersonne.supprimerPersonne(listePersonne.get(0).getId());
			List<Personne> listeFinal = servicePersonne.rechercherPersonnes(p);
			TestCase.assertTrue(listeFinal.size() == 0);
		}
	}
	
//	@Test
	public void testRecupCours() {
		Personne p = new Personne();
		Cour c1 = new Cour();
		Cour c2 = new Cour();
		Cursus cu = new Cursus();
		//List<Cour> cours = new ArrayList<Cour>();
		//List<Personne> personnes = new ArrayList<Personne>();
		
		c1 = serviceCours.getCourbyId(1);
		//System.out.println("Cours 1 : " + c1.getIntitule());
		c2 = serviceCours.getCourbyId(2);
	//	System.out.println("Cours 2 : " + c2.getIntitule());
		
		p = servicePersonne.getPersonneById(1);
	//	System.out.println("Personne : " + p.getNom());
		
		/*cours.add(c1);
		cours.add(c2);
		personnes.add(p);
		cu.setCours(cours);
		cu.setPersonnes(personnes);*/
		
		//servicePersonne.ajouterPersonne(p);
		
		//p = servicePersonne.rechercherPersonnes(p).get(0);
		List<Cour> listeCours = servicePersonne.getCoursFromPersonne(p);
		
		
		TestCase.assertTrue(listeCours.size()>0);
		
		System.out.println("Affichage des cours de la personne " + p.getNom());
		if (listeCours.size()>0) {
			for (Cour cour : listeCours) {
				System.out.println(cour.getIntitule());
			}
		}
	}

}
